package com.wanta.mobile.wantaproject.domain;

import android.view.View;

import com.wanta.mobile.wantaproject.R;
import com.wanta.mobile.wantaproject.adapter.MinutesAdapter;
import com.wanta.mobile.wantaproject.adapter.NumericWheelAdapter;
import com.wanta.mobile.wantaproject.customview.MultiWheelView;
import com.wanta.mobile.wantaproject.customview.OnWheelChangedListener;

import java.util.Arrays;
import java.util.List;

/**
 * Created by WangYongqiang on 2016/11/26.
 */
public class WheelMain {

    private View view;
    private MultiWheelView wv_year;
    private MultiWheelView wv_month;
    private MultiWheelView wv_day;
    private MultiWheelView wv_hours;
    private MultiWheelView wv_mins;
    public int screenheight;
    private boolean hasSelectTime;
    private boolean hasSelectHour;
    private static int START_YEAR = 1880, END_YEAR = 2100;
    MinutesAdapter adapter =new MinutesAdapter(
            0, 45);
    public View getView() {
        return view;
    }

    public void setView(View view) {
        this.view = view;
    }

    public static int getSTART_YEAR() {
        return START_YEAR;
    }

    public static void setSTART_YEAR(int sTART_YEAR) {
        START_YEAR = sTART_YEAR;
    }

    public static int getEND_YEAR() {
        return END_YEAR;
    }

    public static void setEND_YEAR(int eND_YEAR) {
        END_YEAR = eND_YEAR;
    }

    public WheelMain(View view) {
        super();
        this.view = view;
        hasSelectTime = false;
        setView(view);
    }

    public WheelMain(View view, boolean hasSelectTime) {
        super();
        this.view = view;
        this.hasSelectTime = hasSelectTime;
        setView(view);
    }

    public WheelMain(View view, boolean hasSelectTime, boolean hasSelectHour) {
        super();
        this.view = view;
        this.hasSelectTime = hasSelectTime;
        this.hasSelectHour = hasSelectHour;
        setView(view);
    }

    public void initDateTimePicker(int year, int month, int day) {
        this.initDateTimePicker(year, month, day, 0, 0);
    }

    public void initDateTimePicker(int year, int month) {
        this.initDateTimePicker(year, month, 0, 0, 0);
    }

    /**
     * @Description: TODO 弹出日期时间选择器
     */
    public void initDateTimePicker(int year, int month, int day, int h, int m) {
        // 添加大小月月份并将其转换为list,方便之后的判断
        String[] months_big = { "1", "3", "5", "7", "8", "10", "12" };
        String[] months_little = { "4", "6", "9", "11" };

        final List<String> list_big = Arrays.asList(months_big);
        final List<String> list_little = Arrays.asList(months_little);

        // 年
        wv_year = (MultiWheelView) view.findViewById(R.id.year);
        wv_year.setAdapter(new NumericWheelAdapter(
                START_YEAR, END_YEAR));
        wv_year.setCyclic(true);// 可循环滚动
        wv_year.setLabel("年");// 添加文字
        wv_year.setCurrentItem(year - START_YEAR);// 初始化时显示的数据

        // 月
        wv_month = (MultiWheelView) view.findViewById(R.id.month);
        wv_month.setAdapter(new NumericWheelAdapter(
                1, 12));
        wv_month.setCyclic(true);
        wv_month.setLabel("月");
        wv_month.setCurrentItem(month);

        // 日
        wv_day = (MultiWheelView) view.findViewById(R.id.day);
        wv_day.setCyclic(true);
        // 判断大小月及是否闰年,用来确定"日"的数据
        if (list_big.contains(String.valueOf(month + 1))) {
            wv_day.setAdapter(new NumericWheelAdapter(
                    1, 31));
        } else if (list_little.contains(String.valueOf(month + 1))) {
            wv_day.setAdapter(new NumericWheelAdapter(
                    1, 30));
        } else {
            // 闰年
            if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
                wv_day.setAdapter(new NumericWheelAdapter(
                        1, 29));
            else
                wv_day.setAdapter(new NumericWheelAdapter(
                        1, 28));
        }
        wv_day.setLabel("日");
        wv_day.setCurrentItem(day - 1);
        if (hasSelectHour) {

            wv_year.setVisibility(View.GONE);
            wv_month.setVisibility(View.GONE);
            wv_day.setVisibility(View.GONE);
        }

        // 添加"年"监听
        OnWheelChangedListener wheelListener_year = new OnWheelChangedListener() {
            public void onChanged(MultiWheelView wheel, int oldValue, int newValue) {
                int year_num = newValue + START_YEAR;
                // 判断大小月及是否闰年,用来确定"日"的数据
                if (list_big
                        .contains(String.valueOf(wv_month.getCurrentItem() + 1))) {
                    wv_day.setAdapter(new NumericWheelAdapter(
                            1, 31));
                } else if (list_little.contains(String.valueOf(wv_month
                        .getCurrentItem() + 1))) {
                    wv_day.setAdapter(new NumericWheelAdapter(
                            1, 30));
                } else {
                    if ((year_num % 4 == 0 && year_num % 100 != 0)
                            || year_num % 400 == 0)
                        wv_day.setAdapter(new NumericWheelAdapter(
                                1, 29));
                    else
                        wv_day.setAdapter(new NumericWheelAdapter(
                                1, 28));
                }
            }
        };
        // 添加"月"监听
        OnWheelChangedListener wheelListener_month = new OnWheelChangedListener() {
            public void onChanged(MultiWheelView wheel, int oldValue, int newValue) {
                int month_num = newValue + 1;
                // 判断大小月及是否闰年,用来确定"日"的数据
                if (list_big.contains(String.valueOf(month_num))) {
                    wv_day.setAdapter(new NumericWheelAdapter(
                            1, 31));
                } else if (list_little.contains(String.valueOf(month_num))) {
                    wv_day.setAdapter(new NumericWheelAdapter(
                            1, 30));
                } else {
                    if (((wv_year.getCurrentItem() + START_YEAR) % 4 == 0 && (wv_year
                            .getCurrentItem() + START_YEAR) % 100 != 0)
                            || (wv_year.getCurrentItem() + START_YEAR) % 400 == 0)
                        wv_day.setAdapter(new NumericWheelAdapter(
                                1, 29));
                    else
                        wv_day.setAdapter(new NumericWheelAdapter(
                                1, 28));
                }
            }
        };
        wv_year.addChangingListener(wheelListener_year);
        wv_month.addChangingListener(wheelListener_month);

        // 根据屏幕密度来指定选择器字体的大小(不同屏幕可能不同)
        int textSize = 0;
        if (hasSelectTime)
            textSize = (screenheight / 140) * 4;
        else
            textSize = (screenheight / 140) * 4;
        wv_day.TEXT_SIZE = textSize;
        wv_month.TEXT_SIZE = textSize;
        wv_year.TEXT_SIZE = textSize;

    }

    public String getTime() {
        StringBuffer sb = new StringBuffer();
        String strMon;
        String strDay;
        String strHour;
        String strMin;
        int month = wv_month.getCurrentItem() + 1;
        int day = wv_day.getCurrentItem() + 1;
        if (month < 9) {
            strMon = "0" + month;
        } else {
            strMon = String.valueOf(month);
        }
        if (day < 9) {
            strDay = "0" + day;
        } else {
            strDay = String.valueOf(day);
        }
        if (!hasSelectTime) {

            sb.append((wv_year.getCurrentItem() + START_YEAR)).append("-")
                    .append(strMon).append("-")
                    .append(strDay);
        }else{
            sb.append((wv_year.getCurrentItem() + START_YEAR)).append("-")
                    .append(strMon).append("-")
                    .append(strDay);
        }
        return sb.toString();
    }
}

